package com.weixiaodong.javabasic.Java中的枚举类型.后台用户角色管理.基于枚举实现的单例;

/**
 * 通过枚举定义单例模式
 */
@SuppressWarnings("all")
public class Singleton {

    private Singleton() {}; // 私有化单例对象的构造方法，即不对外暴露

    public enum SingletonEnum {
        SEED; // 定义种子枚举变量，通过这个枚举类型调用获取对象的方法

        private Singleton singleton; // 定义枚举的私有属性：单例对象

        SingletonEnum() {
            singleton = new Singleton();
        }

        public Singleton getInstnce() {
            return singleton;
        }
    }

    // 故意外露的对象获取方法，也是外面获取实例的唯一入口
    public static Singleton getInstance(){
        return SingletonEnum.SEED.getInstnce(); // 通过枚举的种子选手来完成
    }


    public static void main(String[] args) {
        Singleton instance1 = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance1 == instance2); // true
    }

}
